package com.hugedata.cdn.util;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

/**
 * 
 * 项目名称：cdn 类名称：FilterGson 类描述： 创建人：zhaoaihua 创建时间�?013-9-14 下午6:22:48 修改备注�?
 * 
 * @version
 * 
 */
public class FilterGson {

    /**
     * 全部gson对象�?
     */
    private Map<String, Gson> map = new HashMap<String, Gson>();

    public Gson getInstance(String className, List<String> attrs) {

        if (map.get(className) == null) {

            Gson gson = new GsonBuilder().setExclusionStrategies(
                    new MenuTreeExclusionStrategy(attrs)).create();

            map.put(className, gson);
        }

        return map.get(className);
    }

    /**
     * 
     * 
     * 项目名称：xiaomifeng 类名称：MenuTreeExclusionStrategy 类描述： 创建人：zhaoaihua
     * 创建时间�?013-9-14 下午6:17:30 修改备注�?
     * 
     * 过滤�?
     * 
     * @version
     * 
     */
    private class MenuTreeExclusionStrategy implements ExclusionStrategy {

        private List<String> filterAttrs;

        public MenuTreeExclusionStrategy(List<String> attrs) {

            filterAttrs = attrs;
        }

        public boolean shouldSkipField(FieldAttributes f) {

            if (filterAttrs.contains(f.getName())) {
                return true;
            }

            return false;
        }

        public boolean shouldSkipClass(Class<?> clazz) {
            return false;
        }

    }

}
